package com.yeyks.commonReference.service.activity;

import cn.hutool.core.lang.WeightRandom;
import com.yeyks.activity.dal.domain.*;
import com.yeyks.common.param.PageParam;
import com.yeyks.commonReference.pojo.vo.activity.DoubleDan.ActivityDoubleDanGetCarouselVo;

import java.util.List;

public interface ActivityBaseService {

    //获取活动信息
    ActivityList getActivityDetail(String activityCode);

    //轮播
    List<ActivityDoubleDanGetCarouselVo> getCarousel(String activityCode, PageParam param);

    /**
     * 记录参与的用户
     *
     * @param activityCode 活动名称,必填
     * @return
     */
    boolean recordParticipation(String activityCode, Integer userId);

    /**
     * 获取参与的用户的数量
     *
     * @param activityCode 活动名称,必填
     * @return
     */
    int getParticipationCount(String activityCode);

    /**
     * 获取参与的活动节点记录
     *
     * @param activityCode 活动名称,必填
     * @param userId       用户id，必填
     * @return
     */
    public List<ActivityNodeUserRecord> getActivityNodeJoinList(String activityCode, Integer userId);

    /**
     * 获取基础抽奖列表
     *
     * @param activityCode 活动名称,必填
     * @return
     */
    List<ActivityPrizeInfo> getActivityPrizeInfoList(String activityCode);

    /**
     * 获取基础抽奖列表
     *
     * @param activityCode 活动名称,必填
     * @param level        奖品级别,可选
     * @return
     */
    List<ActivityPrizeInfo> getActivityPrizeInfoList(String activityCode, Integer level);

    /**
     * 获取基础抽奖列表
     *
     * @param activityCode 活动名称,必填
     * @param level        奖品级别,可选
     * @param parentId     父奖品id,可选
     * @return
     */
    List<ActivityPrizeInfo> getActivityPrizeInfoList(String activityCode, Integer level, Integer parentId);

    /**
     * 生成抽奖对象
     *
     * @param activityCode 活动名称,必填
     * @param level        奖品级别,可选
     * @return
     */
    WeightRandom<ActivityPrizeInfo> getWeightRandom(String activityCode, Integer level);

    /**
     * 生成抽奖对象
     *
     * @param activityCode 活动名称,必填
     * @param level        奖品级别,可选
     * @param parentId     父奖品id,可选
     * @return
     */
    WeightRandom<ActivityPrizeInfo> getWeightRandom(String activityCode, Integer level, Integer parentId);

    /**
     * 生成抽奖对象
     *
     * @param list 抽奖列表,必填
     * @return
     */
    WeightRandom<ActivityPrizeInfo> getWeightRandom(List<ActivityPrizeInfo> list);

    /**
     * 判断活动是否开始和结束
     *
     * @param activityCode 活动名称,必填
     * @return
     */
    void checkActivityEndDate(String activityCode);

    /**
     * 发放奖品
     *
     * @param activityCode 活动名称,必填
     * @param prizeId      奖品id,必填
     * @param userId
     * @return
     */
    boolean giveAwayPrizes(String activityCode, Integer prizeId, Integer userId);

    //发红包
    boolean sendRedEnvelope(Integer amount, String activityCode, Integer userId);

    //获取奖品明细
    List<ActivityDrawRecordNew> getAwardDetails(String activityCode, Integer userId);
}
